package com.jd.platform.sample4.controller;

import com.jd.platform.sample4.entity.Result;
import com.jd.platform.sample4.entity.pojo.Produce;
import com.jd.platform.sample4.service.Produce2Service;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/produce2")
@RequiredArgsConstructor
public class Produce2Controller {
    private final Produce2Service produceService;

    /**
     * 根据ID从Redis查询商品（支持指定返回属性）
     *
     * @param id         商品ID
     * @param attributes 可选参数，指定需要返回的属性（如name,price）
     * @return 商品数据（默认返回所有属性，指定时只返回对应属性）
     * <p>
     * 请求地址：http://localhost:8080/produce/0?attributes=name
     * （?attributes=name&attributes=price只取第一个，代码没有完善）
     */
    @GetMapping("/{id}")
    public Result<?> getByIdRedis(
            @PathVariable long id,
            @RequestParam(required = false) String... attributes) { // 在url的?后面
        try {
            Object result = produceService.getById_Redis(id, attributes);
            if (result == null) {
                return Result.fail("商品不存在");
            }
            return Result.success(result);
        } catch (Exception e) {
            return Result.fail("查询失败：" + e.getMessage());
        }
    }

    /**
     * 新增或更新商品（同步到Redis）
     *
     * @param produce 商品对象
     * @return 操作结果
     * <p>
     * 请求地址：http://localhost:8080/produce/saveOrUpdate
     * 请求体（JSON 格式）：（其中"id"无则新增，有则更新）
     * {
     * "id": 1,
     * "name": "草莓",
     * "price": "39.9"
     * }
     */
    @PostMapping("/saveOrUpdate")
    public Result<?> insertOrUpdateRedis(@RequestBody Produce produce) {
        try {
            produceService.InsertOrUpdate_Redis(produce);
            return Result.success("操作成功");
        } catch (Exception e) {
            return Result.fail("操作失败：" + e.getMessage());
        }
    }

    /**
     * 根据ID删除商品（同步从Redis删除）
     *
     * @param produce 包含ID的商品对象
     * @return 操作结果
     * <p>
     * 请求地址：http://localhost:8080/api/produce/delete
     * 请求体（JSON 格式）：
     * json
     * {
     * "id": 1
     * }
     */
    @DeleteMapping("/delete")
    public Result<?> deleteByIdRedis(@RequestBody Produce produce) {
        try {
            produceService.deleteById_Redis(produce);
            return Result.success("删除成功");
        } catch (Exception e) {
            return Result.fail("删除失败：" + e.getMessage());
        }
    }
}
